'''
字典是另一种可变容器模型，且可存储任意类型对象
键必须是唯一的，但值则不必。
值可以取任何数据类型，但键必须是不可变的，如字符串，数字。
'''
tinydic1 = { 'Name': "Jenny" }
tinydic2 = { 'Name': "Alice", "age":20,"sex":"female" }

print("name=",tinydic2['Name'])
print("age=",tinydic2['age'])
# print("school=",tinydic2['school']) 如果用字典里没有的键访问数据,会报错
print("输出所有的健:",tinydic2.keys())
print("输出所有的值:",tinydic2.values())

'''修改字典'''
tinydic2['age']= 22
tinydic2['school']="学习python"
print("age=",tinydic2['age'])
print("school=",tinydic2['school'])

'''删除字典'''
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del tinydict['Name']  # 删除键 'Name'
print("删除Name键：",tinydict)
# del tinydict     # 删除字典
# tinydict.clear()   # 清空字典

'''不允许同一个键出现两次。创建时如果同一个键被赋值两次，后一个值会被记住'''
tinydict = {'Name': 'Runoob', 'age': 7, 'Name': '小菜鸟'}
print("tinydict['Name']: ", tinydict['Name'])

'''字典的内置函数'''
print("Length:", len(tinydict))
print(type(tinydict))
print(str(tinydict))

'''字典的内置方法'''
# tinydict.clear()
print("copy:",tinydict.copy())  # 复制

'''如果键在字典dict里返回true，否则返回false'''
print('Name' in tinydict)

'''返回指定键的值，如果键不存在于字典中，返回设置的默认值,字典中不添加key和value '''
print("get:",tinydict.get('aaaa','默认值1023'))
print("get之后:",tinydict)

'''如果键不存在于字典中，将会添加key和value到字典中 '''
print("setdefault之前:",tinydict)
print("setdefault:",tinydict.setdefault('hobby','Reading'))
print("setdefault之后:",tinydict)

''' 把字典tinydic2的健/值更新到tinydict中,如果key相同，会覆盖tinydict中的value'''
tinydict.update(tinydic2)
print("update:",tinydict)

'''返回所有对象元素'''
tinydict.items()
print("items:",tinydict)
'''返回所有keys'''
tinydict.keys()
print("keys=",tinydict)
'''返回所有values'''
tinydict.values()

'''删除字典 key（键）所对应的值'''
print("tinydict删除之前：",tinydict)
tinydict.pop('hobby')
print("tinydict删除之后：",tinydict)

'''返回并删除字典中的最后一对键和值'''
print("tinydict.popitem之前：",tinydict)
tinydict.popitem()
print("tinydict.popitem之后：",tinydict)

seq = ('ABCD',123456,True) # 对象seq 可以为列表，元组，集合。---统称序列
dict2=tinydict.fromkeys(seq,'defaultabc')
print("fromkeys:",dict2)




